package chapter04.s01subclass.example05;
// super
// 当子类重写父类的方法后，子类对象将无法访问父类被重写的方法
// 为了解决这个问题，Java提供了super关键字
// super关键字可以在子类中调用父类的 普通属性 方法 构造方法。

// 定义Animal类
class Animal {
    String name = "牧羊犬";

    //定义动物叫的方法
    void shout() {
        System.out.println("动物发出叫声");
    }
}

// 定义Dog类继承动物类
class Dog extends Animal {
    //重写父类Animal中的shout()方法,扩大了访问权限
    public void shout() {
        //super关键字可以在子类中调用父类的方法
        super.shout();      //调用父类中的shout()方法
        System.out.println("汪汪汪……");
    }

    public void printName() {
        //super关键字调用父类中的name属性
        System.out.println("名字:" + super.name);
    }
}

// 定义测试类
public class Example05 {
    public static void main(String[] args) {
        Dog dog = new Dog();  // 创建Dog类的实例对象
        dog.shout();            // 调用dog重写的shout()方法
        dog.printName();        // 调用Dog类中的printName()方法
        //子类通过super关键字可以成功地访问父类成员变量和成员方法
    }
}
